package com.junbao.message.infrastructure.queue;

import java.util.Calendar;
import java.util.Date;

/**
 * @ClassName TaskAttribute
 * @Description 任务属性
 * @date 2017-03-20
 * @version 1.0.0
 *
 */
@SuppressWarnings("all")
public class TaskAttribute {
	
	/** 第几个槽位 */
	private int soltIndex;
	/** 任务应该什么时候执行 */
	private Date executeTime;	
	private long executeTimeStamp;
	/** 任务加入槽位的时间 */
	private Date joinTime;

	public int getSoltIndex() {
		return soltIndex;
	}

	public void setSoltIndex(int soltIndex) {
		this.soltIndex = soltIndex;
	}

	public Date getExecuteTime() {
		return executeTime;
	}

	/**
	 * 由于当时间进入下个时间的时候会将队列的初始时间重置为0，如果最后一个最后执行的时间为第59分59秒，
	 * 任务是每秒执行异常，那么下一次过来的时候即为下一个时间的0秒，再判断的时候0秒的时间会小于上一个时间的59秒，
	 * 这样就会导致忽略上一个小时最后一秒钟的任务，为避免任务被忽略，需要将每个小时的最后一秒钟的任务的执行时间往后延迟一秒进入下一个小时执行。
	 * @param executeTime
	 */
	public void setExecuteTime(Date executeTime) {
		Calendar calendar  = Calendar.getInstance();
		calendar.add(Calendar.HOUR, 1);
		calendar.set(calendar.SECOND, 00);
		calendar.set(calendar.MINUTE, 00);
		if ((calendar.getTime().getTime()-System.currentTimeMillis()) <= 1000) {
			this.executeTime = calendar.getTime();
		}else {
			this.executeTime = executeTime;
		}
		setExecuteTimeStamp(this.executeTime.getTime());
	}

	public Date getJoinTime() {
		return joinTime;
	}

	public void setJoinTime(Date joinTime) {
		this.joinTime = joinTime;
	}
	
	public void setExecuteTimeStamp(long executeTimeStamp) {
		this.executeTimeStamp = executeTimeStamp;
	}
	
	public long getExecuteTimeStamp() {
		return executeTimeStamp;
	}

	public static void main(String[] args) {
		for (int i = 0; i < 1000000; i++) {
			Calendar calendar  = Calendar.getInstance();
			calendar.add(Calendar.HOUR, 1);
			calendar.set(calendar.SECOND, 00);
			calendar.set(calendar.MINUTE, 00);
			if ((calendar.getTime().getTime()-System.currentTimeMillis())!=1000) {
			}
		}
		//System.out.println(DateFormatUtil.dateFormatStr(calendar.getTime(), DateFormatUtil.DATE_FORMAT));
	}
}
